#ifndef METODO_H_
#define METODO_H_

#include <string>
#include <vector>

#include "model/clases/Parametro.h"
#include "model/clases/ComponentClases.h"
#include "model/Utils.h"

class Metodo : public ComponentClasses {

private:
	std::string nombre;
	std::string tipoDatoDevuelto;
	std::vector<Parametro*> parametros;
	Visibilidad visibilidad;

public:
	Metodo(std::string tipoDatoDevuelto, Visibilidad visibilidad,
			const std::string& nombre = "metodo");
	Metodo();
	Metodo(const Metodo& metodo);
    virtual ~Metodo();

	std::string getNombre() const;
	std::string getTipoDatoDevuelto() const;
	std::vector<Parametro*> getParametros() const;
	Visibilidad getVisibilidad() const;

	void setNombre(const std::string& valor);
	void setTipo(const std::string& valor);
	void setVisibilidad(Visibilidad valor);


	void agregarParametro(Parametro *parametro);
	void remplazarParametros(std::vector<Parametro*> parametrosNuevos);

	virtual void serialize(XmlWriter & writer_rep, XmlWriter & writer_comp);

	virtual void deserialize(XmlReader & reader);

	virtual void deserialize(XmlReader & reader, XmlReader & readerModel);


	virtual std::string description();

};

#endif /* METODO_H_ */
